// ESerialInput.qml —— 纯发送输入框（带自动清空 + 历史记录）
// 功能：
//  - 回车发送数据
//  - 可选发送后自动清空输入框
//  - 历史记录缓存，可用 ↑ ↓ 翻阅之前的输入
//  - 支持自定义尺寸、圆角、边框、字体、颜色

import QtQuick
import QtQuick.Controls

Item {
    id: root

    // === 接口属性 ===
    property alias text: textField.text                   // 输入框文本
    property alias placeholderText: textField.placeholderText
    property bool readOnly: false                          // 是否只读
    property int fontSize: 16
    property real radius: 8
    property color borderColor: "#cccccc"
    property color focusBorderColor: "#3B82F6"
    property color backgroundColor: "#ffffff"
    property color textColor: "#000000"
    property bool autoClear: true                           // 是否发送后自动清空输入
    property int maxHistory: 50                             // 历史记录最大条数
    signal sendRequested(string data)                      // 发送信号

    // 内部状态
    property var history: []                                // 历史记录数组
    property int historyIndex: -1                            // 历史记录索引

    // === 尺寸可外部定义 ===
    width: 300
    height: 38

    // === 背景矩形 ===
    Rectangle {
        id: background
        anchors.fill: parent
        radius: root.radius
        color: root.backgroundColor
        border.color: textField.activeFocus ? root.focusBorderColor : root.borderColor
        border.width: 1
    }

    // === 输入框主体 ===
    TextField {
        id: textField
        anchors.fill: parent
        anchors.margins: 6
        font.pixelSize: root.fontSize
        color: root.textColor
        placeholderText: "输入要发送的数据"
        background: null
        readOnly: root.readOnly

        focus: true

        // 回车发送数据
        onAccepted: {
            if (text.length === 0) return

            root.sendRequested(text)

            // 历史记录
            if (history.length === 0 || history[history.length-1] !== text)
                history.push(text)

            // 超过最大历史长度则删除最旧的
            if (history.length > maxHistory)
                history.shift()

            // 自动清空输入框
            if (autoClear) text = ""

            // 重置历史索引
            historyIndex = history.length
        }

        // === 历史记录翻阅 ===
        Keys.onPressed: {
            if (history.length === 0) return

            if (event.key === Qt.Key_Up) {
                if (historyIndex > 0) historyIndex--
                text = history[historyIndex]
                event.accepted = true
            } else if (event.key === Qt.Key_Down) {
                if (historyIndex < history.length - 1) {
                    historyIndex++
                    text = history[historyIndex]
                } else {
                    historyIndex = history.length
                    text = ""
                }
                event.accepted = true
            }
        }
    }
}
